package com.lsq.wuyuge.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;

public class JwtUtil {
    /**
     * 生成jwt
     * @param secretKet
     * @param ttlMillis
     * @param claims
     * @return
     */
    public static String createToken(String secretKet, long ttlMillis, Map<String,Object> claims) {
        //设置签名算法
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
        //生成JWT时间
        long passMillis = System.currentTimeMillis()+ttlMillis;
        Date pass = new Date(passMillis);
        //生成jwt的body
        JwtBuilder jwtBuilder = Jwts.builder()
                .addClaims(claims)
                .signWith(signatureAlgorithm, secretKet.getBytes(StandardCharsets.UTF_8))
                .setExpiration(pass);
        //将构建好的 JWT 转换为紧凑的字符串形式返回
        return jwtBuilder.compact();
    }

    /**
     * 解析jwt
     * @param token
     * @param secretKet
     * @return
     */
        public static Claims paresToken(String token, String secretKet) {
        /*创建 JWT 解析器。
        设置用于验证签名的密钥。
        解析 JWT 字符串并验证其签名。
        提取并返回 JWT 中的声明（Claims）*/
        Claims claims = Jwts.parser()
                .setSigningKey(secretKet.getBytes(StandardCharsets.UTF_8))
                .parseClaimsJws(token).getBody();
        return claims;
    }

}
